[新機能]CREATE OR ALTERコマンドがロール・データベース・スキーマ・ステージ・ビュー・ウェアハウスに対応しました

[新機能]CREATE OR ALTERコマンドがロール・データベース・スキーマ・ステージ・ビュー・ウェアハウスに対応しました

Clock Icon2024.11.14

さがらです。

先日のアップデートで、SnowflakeのCREATE OR ALTERコマンドがロール・データベース・スキーマ・ステージ・ビュー・ウェアハウスに対応しました。(パブリックプレビュー)

https://docs.snowflake.com/en/release-notes/2024/other/2024-11-12-create-or-alter-pupr

これまではテーブルのみがCREATE OR ALTERコマンドに対応していたのですが、今回のアップデートでSnowflakeでもよく使用する各オブジェクトに対応するようになったため、CREATE OR ALTERコマンドを用いた宣言的なアプローチで、Snowflakeのリソースの一部のIaCを担う事ができます。(ユーザーや他のスキーマオブジェクトもいつか対応してほしい…!)

実際にどのような挙動となるか試してみたので、本記事でその内容をまとめてみます。

データベースに対するCREATE OR ALTERコマンド

まず、データベースに対するCREATE OR ALTERコマンドを試してみます。

データベースを作成後にスキーマとテーブルを追加してみて、その後にCREATE OR REPLACECREATE OR ALTERでどう挙動が異なるかを見てみます。

従来のCREATE OR REPLACEの場合

以下のクエリを実行して、データベースを作成後にスキーマとテーブルを追加してみます。

create or replace database sagara_tmp;

use database sagara_tmp;
create schema tmp_schema;

use schema tmp_schema;
create table tmp_table as select 1 as num_col;

2024-11-14_07h28_52

この状態で、もう一度CREATE OR REPLACEを実行してみます。すると、REPLACEしてしまうため作成したスキーマとテーブルが消えてしまいます。

create or replace database sagara_tmp;

2024-11-14_07h30_49

新機能のCREATE OR ALTERの場合

以下のクエリを実行して、データベースを作成後にスキーマとテーブルを追加してみます。

create or alter database sagara_tmp;

use database sagara_tmp;
create schema tmp_schema;

use schema tmp_schema;
create table tmp_table as select 1 as num_col;

2024-11-14_07h28_52

この状態で、もう一度CREATE OR ALTERを実行してみます。すると、CREATE OR REPLACEとは違って、作成したスキーマとテーブルは残ったままとなります。

create or alter database sagara_tmp;

2024-11-14_07h28_52

ロールに対するCREATE OR ALTERコマンド

次に、ロールに対するCREATE OR ALTERコマンドを試してみます。

ロールを作成後に権限をGRANTしてみて、その後にCREATE OR REPLACECREATE OR ALTERでどう挙動が異なるかを見てみます。

従来のCREATE OR REPLACEの場合

以下のクエリを実行して、ロールを作成後に権限をGRANTしてみます。

use role securityadmin;

create or replace role sagara_tmp_role;

grant usage on database sagara_tmp to role sagara_tmp_role;
grant usage on schema sagara_tmp.tmp_schema to role sagara_tmp_role;
grant select on table sagara_tmp.tmp_schema.tmp_table to role sagara_tmp_role;

show grants to role sagara_tmp_role;

2024-11-14_07h55_43

この上で、もう一度CREATE OR REPLACEを実行してみます。すると、REPLACEしてしまうためGRANTした権限が全てなくなってしまいます。

create or replace role sagara_tmp_role;

show grants to role sagara_tmp_role;

2024-11-14_07h57_04

新機能のCREATE OR ALTERの場合

以下のクエリを実行して、ロールを作成後に権限をGRANTしてみます。

use role securityadmin;

create or alter role sagara_tmp_role;

grant usage on database sagara_tmp to role sagara_tmp_role;
grant usage on schema sagara_tmp.tmp_schema to role sagara_tmp_role;
grant select on table sagara_tmp.tmp_schema.tmp_table to role sagara_tmp_role;

show grants to role sagara_tmp_role;

2024-11-14_07h58_04

この状態で、もう一度CREATE OR ALTERを実行してみます。すると、CREATE OR REPLACEとは違って、GRANTした権限はそのまま残っています。

create or alter role sagara_tmp_role;

show grants to role sagara_tmp_role;

2024-11-14_07h59_31

最後に

SnowflakeのCREATE OR ALTERコマンドがロール・データベース・スキーマ・ステージ・ビュー・ウェアハウスに対応したので、データベースとロールで試してその内容をまとめてみました。

CREATECREATE OR REPLACEだと実行のたびにエラーが起きたり作り直しが起きてしまうため、同じクエリを何度も実行するということが容易にできなかったのですが、CREATE OR ALTERならば何度実行してもすでにオブジェクトがある場合にはそれを残しつつ指定した内容の変更だけが行えます。

Terraformとかを導入せずともワークシートベースで宣言的なアプローチによるIaCが行えるため、とても熱い機能だと思います!!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.